home *** CD-ROM | disk | FTP | other *** search
/ Cracking 1 / Cracking I..iso / Příklady / 10.Crackujeme / CRCMe / CRCMeDlg.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2002-08-07  |  5.3 KB  |  195 lines

  1. // CRCMeDlg.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "CRCMe.h"
  6. #include "Nag.h"
  7. #include "CRCMeDlg.h"
  8.  
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14.  
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CCRCMeDlg dialog
  17.  
  18. CCRCMeDlg::CCRCMeDlg(CWnd* pParent /*=NULL*/)
  19.     : CDialog(CCRCMeDlg::IDD, pParent)
  20. {
  21.     //{{AFX_DATA_INIT(CCRCMeDlg)
  22.         // NOTE: the ClassWizard will add member initialization here
  23.     //}}AFX_DATA_INIT
  24.     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  25. }
  26.  
  27. void CCRCMeDlg::DoDataExchange(CDataExchange* pDX)
  28. {
  29.     CDialog::DoDataExchange(pDX);
  30.     //{{AFX_DATA_MAP(CCRCMeDlg)
  31.         // NOTE: the ClassWizard will add DDX and DDV calls here
  32.     //}}AFX_DATA_MAP
  33. }
  34.  
  35. BEGIN_MESSAGE_MAP(CCRCMeDlg, CDialog)
  36.     //{{AFX_MSG_MAP(CCRCMeDlg)
  37.     ON_WM_PAINT()
  38.     ON_WM_QUERYDRAGICON()
  39.     //}}AFX_MSG_MAP
  40. END_MESSAGE_MAP()
  41.  
  42. /////////////////////////////////////////////////////////////////////////////
  43. // CCRCMeDlg message handlers
  44.  
  45.  
  46. BOOL CCRCMeDlg::OnInitDialog()
  47. {
  48.     CDialog::OnInitDialog();
  49.  
  50.     SetIcon(m_hIcon, TRUE);            // Set big icon
  51.     SetIcon(m_hIcon, FALSE);        // Set small icon
  52.  
  53.     /*******Ulo₧enφ °et∞zc∙ tak, aby nebyli viditelnΘ v W32Dasm referenci °et∞zc∙.
  54.     V hexadecimßlnφm editoru jako je nap°. Hiew si vÜechny °et∞zce bez problΘm∙ p°eΦtete:-(*******/    
  55.     BYTE BPXfailed[23] = {0x4E,0x61,0x6C,0x65,0x7A,0x65,0x6E,0x20,0x42,0x50,0x58,0x20,0x62,0x72,0x65,0x61,0x6B,0x70,0x6F,0x69,0x6E,0x74,0};
  56.     BYTE Library[9] = {0x4B,0x65,0x72,0x6E,0x65,0x6C,0x33,0x32,0};
  57.     BYTE APIC[12] = {0x43,0x72,0x65,0x61,0x74,0x65,0x46,0x69,0x6C,0x65,0x41, 0};
  58.     BYTE APIR[9] = {0x52,0x65,0x61,0x64,0x46,0x69,0x6C,0x65,0};
  59.     BYTE Openfailed[21] = {0x53,0x6F,0x75,0x62,0x6F,0x72,0x20,0x6E,0x65,0x6C,0x7A,0x65,0x20,0x6F,0x74,0x65,0x76,0xF8,0xED,0x74,0};
  60.     BYTE CRCok[26] = {0x4B,0xF3,0x64,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D, 0x75,0x20,0x6E,0x65,0x62,0x79,0x6C,0x20,0x7A,0x6D,0xEC,0x6E,0xEC, 0x6E,0};
  61.     BYTE CRCfailed[24] = {0x4B,0xF3,0x64,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x75,0x20,0x62,0x79,0x6C,0x20,0x7A,0x6D,0xEC,0x6E,0xEC,0x6E,0};
  62.     BYTE Soubor[10] = {0x43,0x52,0x43,0x4D,0x65,0x2E,0x65,0x78,0x65,0};
  63.  
  64. DulezitaOblast:
  65.     CNag nag;  // CNag - t°φda standardnφho dialogu
  66.     nag.DoModal();  // zobrazenφ dialogu
  67.  
  68.     HMODULE handle = GetModuleHandle((char*)Library);  // kernel32 ImageBase
  69.     FARPROC Create = GetProcAddress(handle,(char*)APIC);  // CreateFileA
  70.     FARPROC Read = GetProcAddress(handle,(char*)APIR);  // ReadFile
  71.     
  72.     byte CMem[4],RMem[4];
  73.     memcpy(&CMem,Create,sizeof CMem);
  74.     memcpy(&RMem,Read,sizeof RMem);
  75.     
  76.     /*******Kontrola p°φtomnosti bpx breakpointu na prvnφch Φty°ech bajtech funkcφ CreateFileA a ReadFile*******/
  77.     for (int i = 0; i < 5; i++)
  78.     {
  79.         if (CMem[i] == 0xCC || RMem[i] == 0xCC)
  80.         {
  81.             SetDlgItemText(IDC_CRCSTATUS,(char*)BPXfailed);
  82.             return TRUE;
  83.         }
  84.     }
  85.  
  86.     DWORD Adresa = (DWORD)&Soubor[0];
  87.     HANDLE File;
  88.     DWORD NOBR;
  89.  
  90.     __asm
  91.     {
  92.         push 0
  93.         push FILE_ATTRIBUTE_NORMAL
  94.         push OPEN_EXISTING
  95.         push 0
  96.         push FILE_SHARE_READ
  97.         push GENERIC_READ
  98.         push Adresa
  99.         call Create
  100.         mov File,eax
  101.     }
  102.     // File = CreateFile((char*)Soubor,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);  // zφskßnφ handlu souboru
  103.     if (File == INVALID_HANDLE_VALUE)
  104.     {
  105.         // tuto chybu by ochrana m∞la vyhodnotit jako pokus o prolomenφ
  106.         SetDlgItemText(IDC_CRCSTATUS,(char*)Openfailed);   
  107.          return TRUE;
  108.     }
  109.  
  110.     DWORD FileSize = GetFileSize(File,NULL);
  111.     BYTE *pMem = new BYTE[FileSize];  // alokace pam∞ti
  112.     Adresa = (DWORD)&NOBR;
  113.  
  114.     __asm
  115.     {
  116.         push 0
  117.         push Adresa
  118.         push FileSize
  119.         push pMem
  120.         push File
  121.         call Read
  122.     }
  123.     // ReadFile(File,pMem, Size,&NOBR,NULL);  // naΦtenφ souboru do pam∞ti
  124.     
  125.     /*******V²poΦet kontrolnφho souΦtu*******/
  126.     __asm
  127.     {
  128.         mov eax,offset KonecDulObl
  129.         sub eax,offset DulezitaOblast  // EAX = dΘlka kontrolovan²ch dat
  130.         mov ecx,eax
  131.         mov edi,offset DulezitaOblast
  132.         sub edi,400000h
  133.         add edi,pMem  // EDI = ukazatel na kontrolovanß data
  134.  
  135.         xor eax,eax    
  136.         xor ebx,ebx    
  137.         xor esi,esi
  138. Looop:
  139.         mov al,byte ptr [edi]  // naΦtenφ dat
  140.         mul esi  // jednoduchΘ nßsobenφ
  141.         add ebx,eax  // p°idßnφ v²sledku do EBX        
  142.         inc edi  // posunutφ se na dalÜφ bajt
  143.         inc esi  // zv∞tÜenφ ESI
  144.         loop Looop
  145.         // --> EBX = kontrolnφ souΦet
  146.  
  147. KonecDulObl:        
  148.         cmp ebx,387D0406h
  149.         je ok
  150.     }
  151.     SetDlgItemText(IDC_CRCSTATUS,(char*)CRCfailed);
  152.     delete pMem;
  153.     return TRUE;
  154.  
  155. ok:
  156.     SetDlgItemText(IDC_CRCSTATUS,(char*)CRCok);
  157.     delete pMem;
  158.     return TRUE;
  159. }
  160.  
  161.  
  162. // If you add a minimize button to your dialog, you will need the code below
  163. //  to draw the icon.  For MFC applications using the document/view model,
  164. //  this is automatically done for you by the framework.
  165.  
  166. void CCRCMeDlg::OnPaint() 
  167. {
  168.     if (IsIconic())
  169.     {
  170.         CPaintDC dc(this); // device context for painting
  171.  
  172.         SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  173.  
  174.         // Center icon in client rectangle
  175.         int cxIcon = GetSystemMetrics(SM_CXICON);
  176.         int cyIcon = GetSystemMetrics(SM_CYICON);
  177.         CRect rect;
  178.         GetClientRect(&rect);
  179.         int x = (rect.Width() - cxIcon + 1) / 2;
  180.         int y = (rect.Height() - cyIcon + 1) / 2;
  181.  
  182.         // Draw the icon
  183.         dc.DrawIcon(x, y, m_hIcon);
  184.     }
  185.     else
  186.     {
  187.         CDialog::OnPaint();
  188.     }
  189. }
  190.  
  191. HCURSOR CCRCMeDlg::OnQueryDragIcon()
  192. {
  193.     return (HCURSOR) m_hIcon;
  194. }
  195.